home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / share / eselect / modules / rc.eselect < prev   
Text File  |  2006-04-12  |  7KB  |  286 lines

  1. # Copyright 1999-2005 Gentoo Foundation
  2. # Distributed under the terms of the GNU General Public License v2
  3. # $Id: rc.eselect 246 2005-12-05 23:07:53Z kugelfang $
  4.  
  5. DESCRIPTION="Manage /etc/init.d scripts in runlevels"
  6. MAINTAINER="Danny van Dyk <kugelfang@gentoo.org>"
  7. SVN_DATE='$Date: 2005-12-05 23:07:53 +0000 (Mon, 05 Dec 2005) $'
  8. VERSION=$(svn_date_to_version "${SVN_DATE}")
  9.  
  10. # global setting
  11. RC_SOFTLEVEL=/var/lib/init.d/softlevel
  12.  
  13. # list_runlevels PRIVATE
  14. # list runlevels for file $1
  15. list_runlevels() {
  16.     [[ ${#@} -eq 1 ]] || return
  17.     local runlevels
  18.     for x in ${ROOT}/etc/runlevels/* ; do
  19.         [[ -d ${x} ]] || continue
  20.         [[ -L ${ROOT}/etc/runlevels/${x##*/}/${file} ]] \
  21.             && runlevels=(${runlevels[@]} "${x##*/}")
  22.     done
  23.     echo -ne "${runlevels[@]}"
  24. }
  25.  
  26. # is_script PRIVATE
  27. # check if file $1 is a valid init script
  28. is_script() {
  29.     local file=${1}
  30.     [[ -n ${file} ]] \
  31.         || return 1
  32.     ( [[ -L ${file} ]] \
  33.         && [[ ! -e $(dirname ${file})/$(readlink ${file}) ]] ) \
  34.         && return 1
  35.     [[ -e ${file} ]] \
  36.         && [[ ${file%%.sh} == ${file} ]] \
  37.         && [[ ${file%%\~} == ${file} ]] \
  38.         && [[ -n `grep "^#\!/sbin/runscript" ${file}` ]]
  39. }
  40.  
  41. # find_scripts PRIVATE
  42. # browse directory $1 for init scripts and return a list
  43. find_scripts() {
  44.     local ret
  45.     for file in ${1}/* ; do
  46.         is_script ${file} \
  47.             && ret=(${ret[@]} "${file##*/}")
  48.     done
  49.     echo -ne ${ret[@]}
  50. }
  51.  
  52. # run_runscript PRIVATE
  53. # run RC_RUNSCRIPT with script $2- and command $1
  54. run_runscript() {
  55.     local command=${1}
  56.     shift
  57.     write_list_start "${1}"
  58.     shift
  59.     for script in ${@} ; do
  60.         is_script ${ROOT}/etc/init.d/${script} \
  61.             && /sbin/runscript ${ROOT}/etc/init.d/${script} ${command}
  62.     done
  63. }
  64.  
  65. ### add action
  66.  
  67. describe_add() {
  68.     echo "Add script to existing runlevel(s)"
  69. }
  70.  
  71. describe_add_parameters() {
  72.     echo "<script>"
  73.     echo "<runlevels>"
  74. }
  75.  
  76. describe_add_options() {
  77.     echo "script : Init script (from 'list' action)"
  78.     echo "runlevels : Runlevels to add to (defaults to 'default')"
  79. }
  80.  
  81. do_add() {
  82.     [[ ${#@} -gt 0 ]] \
  83.         || die -q "Please specify the init script to be added!"
  84.     local script=${1##*/}
  85.     [[ -e ${ROOT}/etc/init.d/${script} ]] \
  86.         || die -q "Please specify a valid init script!"
  87.     shift 1
  88.     local runlevels=${@:-default}
  89.     write_list_start "Adding $(highlight ${script}) to following runlevels"
  90.     for runlevel in ${runlevels} ; do
  91.         if [[ ! -d ${ROOT}/etc/runlevels/${runlevel} ]] ; then
  92.             write_kv_list_entry ${runlevel} "[invalid]"
  93.             continue
  94.         else
  95.             if [[ -L ${ROOT}/etc/runlevels/${runlevel}/${script} ]] ; then
  96.                 write_kv_list_entry ${runlevel} "[skipped]"
  97.             else
  98.                 ln -sf \
  99.                     ${ROOT}/etc/init.d/${script} \
  100.                     ${ROOTi}/etc/runlevels/${runlevel}/${script} \
  101.                     && write_kv_list_entry ${runlevel} "[done]" \
  102.                     || write_kv_list_entry ${runlevel} "[failed]"
  103.             fi
  104.         fi
  105.     done
  106. }
  107.  
  108. ### delete action
  109.  
  110. describe_delete() {
  111.     echo "Delete script from existing runlevel(s)"
  112. }
  113.  
  114. describe_delete_parameters() {
  115.     echo "<script>"
  116.     echo "<runlevels>"
  117. }
  118.  
  119. describe_delete_options() {
  120.     echo "script : Init script (from 'list' action)"
  121.     echo "runlevels : Runlevels to delete from (defaults to 'default')"
  122. }
  123.  
  124. do_delete() {
  125.     [[ ${#@} -gt 0 ]] \
  126.         || die -q "Please specify the init script to be deleted!"
  127.     local script=${1##*/}
  128.     [[ -e ${ROOT}/etc/init.d/${script} ]] \
  129.         || die -q "Please specify a valid init script!"
  130.     shift 1
  131.     local runlevels=${@:-default}
  132.     write_list_start "Deleting $(highlight ${script}) from following runlevels"
  133.     for runlevel  in ${runlevels} ; do
  134.         if [[ ! -d ${ROOT}/etc/runlevels/${runlevel} ]] ; then
  135.             write_kv_list_entry ${runlevel} "[invalid]"
  136.             continue
  137.         else
  138.             if [[ -L ${ROOT}/etc/runlevels/${runlevel}/${script} ]] ; then
  139.                 rm ${ROOT}/etc/runlevels/${runlevel}/${script} \
  140.                     && write_kv_list_entry ${runlevel} "[done]" \
  141.                     || write_kv_list_entry ${runlevel} "[failed]"
  142.             else
  143.                 write_kv_list_entry ${runlevel} "[skipped]"
  144.             fi
  145.         fi
  146.     done
  147. }
  148.  
  149. ### list action
  150.  
  151. describe_list() {
  152.     echo "List all available init scripts"
  153. }
  154.  
  155. describe_list_parameters() {
  156.     echo "<runlevel>"
  157. }
  158.  
  159. describe_list_options() {
  160.     echo "runlevel : Runlevel to list (defaults to all)"
  161. }
  162.  
  163. do_list() {
  164.     local dir file item
  165.     if [[ -n ${1} ]] && [[ -d ${ROOT}/etc/runlevels/${1} ]] ; then
  166.         dir=${ROOT}/etc/runlevels/${1}
  167.         write_list_start "Init scripts to be started by runlevel $(highlight ${1})"
  168.     elif [[ -z ${1} ]] ; then
  169.         dir=${ROOT}/etc/init.d
  170.         write_list_start "Available init scripts"
  171.     else
  172.         die -q "${1} is no valid runlevel!"
  173.     fi
  174.     
  175.     for file in $(find_scripts ${dir}) ; do
  176.             [[ ${dir##*/} = init.d ]] \
  177.                 && write_kv_list_entry ${file} "$(list_runlevels ${file})" \
  178.                 || echo "  ${file}"
  179. #                && echo "  ${file} $(space $((20 - ${#file}))) | $(list_runlevels ${file})" \
  180. #                || echo "  ${file}"
  181.     done
  182. }
  183.  
  184. ### show action
  185.  
  186. describe_show() {
  187.     echo "Show init script status for current runlevel"
  188. }
  189.  
  190. do_show() {
  191.     local runlevel=$(< ${RC_SOFTLEVEL}) script stopped
  192.     write_list_start "Status of init scripts in runlevel $(highlight ${runlevel})"
  193.     for script in $(find_scripts ${ROOT}/etc/runlevels/${runlevel}) ; do
  194.         stopped=true
  195.         for x in started starting stopping failed broken ; do
  196.             if [[ -L ${ROOT}/var/lib/init.d/${x}/${script} ]] ; then
  197.                 write_kv_list_entry ${script} "[${x}]"
  198.                 stopped=false
  199.             fi
  200.         done
  201.         [[ ${stopped} == true ]] && write_kv_list_entry ${script} "[stopped]"
  202.     done
  203. }
  204.  
  205. ### start action
  206.  
  207. describe_start() {
  208.     echo "Start given set of init scripts manually"
  209. }
  210.  
  211. describe_start_parameters() {
  212.     echo "<scripts>"
  213. }
  214.  
  215. describe_start_options() {
  216.     echo "scripts : Init scripts to start"
  217. }
  218.  
  219. do_start() {
  220.     [[ ${#@} -gt 0 ]] \
  221.         || die -q "Please specify the init script to be started!"
  222.     run_runscript start "Starting init script$([[ ${#@} -gt 1 ]] && echo -ne 's')" ${@}
  223. }
  224.  
  225. ### stop action
  226.  
  227. describe_stop() {
  228.     echo "Stop given set of init scripts manually"
  229. }
  230.  
  231. describe_stop_parameters() {
  232.     echo "<scripts>"
  233. }
  234.  
  235. describe_stop_options() {
  236.     echo "scripts : Init scripts to stop"
  237. }
  238.  
  239. do_stop() {
  240.     [[ ${#@} -gt 0 ]] \
  241.         || die -q "Please specify the init script to be stopped!"
  242.     run_runscript stop "Stopping init script$([[ ${#@} -gt 1 ]] && echo -ne 's')" ${@}
  243. }
  244.  
  245. ### pause action
  246.  
  247. describe_pause() {
  248.     echo "Pauses given set of init scripts manually"
  249. }
  250.  
  251. describe_pause_parameters() {
  252.     echo "<scripts>"
  253. }
  254.  
  255. describe_pause_options() {
  256.     echo "scripts : Init scripts to pause"
  257. }
  258.  
  259. do_pause() {
  260.     [[ ${#@} -gt 0 ]] \
  261.         || die -q "Please specify the init script to be paused!"
  262.     run_runscript pause "Pausing init script$([[ ${#@} -gt 1 ]] && echo -ne 's')" ${@}
  263. }
  264.  
  265. ### restart action
  266.  
  267. describe_restart() {
  268.     echo "Restart given set of init scripts"
  269. }
  270.  
  271. describe_restart_parameters() {
  272.     echo "<scripts>"
  273. }
  274.  
  275. describe_restart_options() {
  276.     echo "scripts : Init scripts to restart"
  277. }
  278.  
  279. do_restart() {
  280.     [[ ${#@} -gt 0 ]] \
  281.         || die -q "Please specify the init script to be restarted!"
  282.     run_runscript restart "Restarting init script$([[ ${#@} -gt 1 ]] && echo -ne 's')" ${@}
  283. }
  284.  
  285. # vim: set ft=eselect :
  286.